import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from datetime import datetime
from pyecharts.charts import *

# 设置中文显示
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 读取Excel文件
df = pd.read_excel('FhjlViewDD.xlsx')

# 将创建时间列转换为日期时间格式
df['创建时间'] = pd.to_datetime(df['创建时间'])

# 筛选6月份矿粉数据
june_data = df[(df['创建时间'].dt.month == 6)]

# a. 矿粉货运量日趋势
mineral_data = june_data[june_data['货品'] == '矿粉']
daily_mineral = mineral_data.groupby(mineral_data['创建时间'].dt.date)['净重'].sum().reset_index()

# b. 水泥货运量日趋势
cement_data = june_data[june_data['货品'] == '水泥']
daily_cement = cement_data.groupby(cement_data['创建时间'].dt.date)['净重'].sum().reset_index()

# c. 客户货运需求排名
customer_demand = june_data.groupby('客户')['净重'].sum().sort_values(ascending=False)

# d. 发货地货运总量
location_total = june_data.groupby('发货地')['净重'].sum()

# e. 车牌号货运量排名
plate_total = june_data.groupby('车辆')['净重'].sum().sort_values(ascending=False)


plt.figure(figsize=(12, 6),dpi = 500)
plt.bar(daily_mineral['创建时间'], daily_mineral['净重'], color='skyblue')
plt.title('6月份每日矿粉货运量')
plt.xlabel('日期')
plt.ylabel('净重(吨)')
plt.xticks(rotation=45)
plt.savefig('mineral_powder_daily.png')

# b. 水泥日趋势柱状图
plt.figure(figsize=(12, 6),dpi = 500)
sns.barplot(x='创建时间', y='净重', data=daily_cement, color='orange')
plt.title('6月份每日水泥货运量')
plt.xlabel('日期')
plt.ylabel('净重(吨)')
plt.xticks(rotation=45)
plt.savefig('cement_daily.png')

# c 客户货运需求量排序
customer_demand = june_data.groupby('客户')['净重'].sum().sort_values(ascending=False)
print(customer_demand)
plt.figure(figsize=(12,8),dpi= 700)
sns.barplot(x='净重', y='客户', data=customer_demand.reset_index(), palette='Blues_d')
plt.title('客户货运需求量排名')
plt.xlabel('货运量(吨)')
plt.ylabel('客户名称')
plt.tight_layout()
plt.savefig('customer_demand_ranking.png')

# d. 发货地发货总量
x_data = june_data['发货地'].unique()
y_data = [location_total[i] for i in x_data]

pie = (Pie()
       .add('', [list(z) for z in zip(x_data, y_data)])
       )

pie.render_notebook()

# e 各个车牌号的总货运量
plate_total = june_data.groupby('车辆')['净重'].sum().sort_values(ascending=False)
plt.figure(figsize=(12, 12),dpi= 500)
sns.barplot(x='净重', y='车辆', data=plate_total.reset_index(), palette='Blues_d')
plt.title('各车牌号的总货运量排名')
plt.xlabel('货运量(吨)')
plt.ylabel('客户名称')
plt.tight_layout()
plt.savefig('customer_demand_ranking.png')